home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 242 / Issue 242 - April 2008 - DPCS0408DVD.ISO / Software Money Savers / VirtualDub / Source / VirtualDub-1.7.7-src.7z / src / h / vd2 / plugin / vdvideofilt.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-03-14  |  4.7 KB  |  132 lines

  1. #ifndef f_VD2_PLUGIN_VDVIDEOFILT_H
  2. #define f_VD2_PLUGIN_VDVIDEOFILT_H
  3.  
  4. #include <vd2/Kasumi/pixmap.h>
  5.  
  6. struct VDVideoFilterDefinition;
  7. struct VDVideoFilterContext;
  8. struct VDVideoFilterFrame;
  9.  
  10. enum VDVideoFilterFieldMode {
  11.     kVFV_Unknown                = 0,
  12.     kVFV_Progressive            = 1,
  13.     kVFV_InterlacedEvenFirst    = 2,
  14.     kVFV_InterlacedOddFirst        = 3
  15. };
  16.  
  17. struct VDVideoFilterPin {
  18.     VDPixmap    *mpFormat;
  19.     sint64        mFrameNum;
  20.     sint64        mStart;
  21.     sint64        mLength;
  22.     sint32        mFrameRateHi;
  23.     sint32        mFrameRateLo;
  24.     sint32        mFieldMode;        // one of VDVideoFilterFieldMode
  25. };
  26.  
  27. struct VDVideoFilterCallbacks {
  28.     void (VDAPIENTRY *mpPrefetchProc)(const VDVideoFilterContext *pContext, int pin, sint64 frameno, uint32 flags);
  29.     void (VDAPIENTRY *mpAllocFrameProc)(const VDVideoFilterContext *pContext);
  30.     void (VDAPIENTRY *mpCopyFrameProc)(const VDVideoFilterContext *pContext, VDVideoFilterFrame *pFrame);
  31. };
  32.  
  33. struct VDVideoFilterFrameVtbl {
  34.     int (VDAPIENTRY *mpAddRef)(VDVideoFilterFrame *);
  35.     int (VDAPIENTRY *mpRelease)(VDVideoFilterFrame *);
  36.     VDVideoFilterFrame *(VDAPIENTRY *mpWriteCopy)(VDVideoFilterFrame *);
  37.     VDVideoFilterFrame *(VDAPIENTRY *mpWriteCopyRef)(VDVideoFilterFrame *);
  38. };
  39.  
  40. struct VDVideoFilterFrame {
  41.     const VDVideoFilterFrameVtbl    *mpVtbl;
  42.     VDPixmap    *mpPixmap;
  43.     sint64        mFrameNum;
  44.  
  45.     inline int AddRef() { return mpVtbl->mpAddRef(this); }
  46.     inline int Release() { return mpVtbl->mpRelease(this); }
  47.     inline VDVideoFilterFrame *WriteCopy() { return mpVtbl->mpWriteCopy(this); }
  48.     inline VDVideoFilterFrame *WriteCopyRef() { return mpVtbl->mpWriteCopyRef(this); }
  49. };
  50.  
  51. struct VDVideoFilterContext {
  52.     void *mpFilterData;
  53.     VDVideoFilterPin    **mpInputs;
  54.     VDVideoFilterPin    *mpOutput;
  55.     VDVideoFilterFrame    **mpSrcFrames;
  56.     VDVideoFilterFrame    *mpDstFrame;
  57.     IVDPluginCallbacks *mpServices;
  58.     const VDVideoFilterCallbacks *mpVideoCallbacks;
  59.     const VDVideoFilterDefinition *mpDefinition;
  60.     uint32    mAPIVersion;
  61.     int        mSrcFrameCount;
  62.  
  63.  
  64.     inline void Prefetch(int pin, sint64 frameno, uint32 flags) const {
  65.         mpVideoCallbacks->mpPrefetchProc(this, pin, frameno, flags);
  66.     }
  67.  
  68.     inline void AllocFrame() const {
  69.         mpVideoCallbacks->mpAllocFrameProc(this);
  70.     }
  71.  
  72.     inline void CopyFrame(VDVideoFilterFrame *pFrame) const {
  73.         mpVideoCallbacks->mpCopyFrameProc(this, pFrame);
  74.     }
  75. };
  76.  
  77. enum {
  78.     kVFVRun_OK                = 0,
  79.     kVFVRun_NeedMoreFrames    = 1,
  80.     kVFVPrepare_Serialize    = 1,
  81. };
  82.  
  83. typedef void *        (VDAPIENTRY *VDVideoFilterCreateProc        )(const VDVideoFilterContext *pContext);
  84. typedef sint32        (VDAPIENTRY *VDVideoFilterMainProc            )(const VDVideoFilterContext *pContext, sint32 cmd, sint64 n, void *p, sint32 size);
  85.  
  86. struct VFVCmdInfo_GetDirectRange {
  87.     sint64    pos;
  88.     sint32    len;
  89. };
  90.  
  91. enum {                                    //    n            p                    Action
  92.     kVFVCmd_Null            = 0,        //                                    Do nothing.
  93.     kVFVCmd_Destroy            = 1,        //                                    Commit suicide (delete this).
  94.     kVFVCmd_Ext                = 2,        //                interface name        Return command base for extension or return 0 if not supported.
  95.     kVFVCmd_Run                = 3,        //                                    Process a frame.
  96.     kVFVCmd_Prefetch        = 4,        //    frameno                            Prefetch frames required to compute desired output frame.
  97.     kVFVCmd_Prepare            = 5,        //                                    Validate parameters and compute valid output frame for input frame types.
  98.     kVFVCmd_Start            = 6,        //                                    Jump to running state.
  99.     kVFVCmd_Stop            = 7,        //                                    Revert to idle state.
  100.     kVFVCmd_Suspend            = 8,        //                buffer                Freeze filter state and serialize to memory block.  Return byte size used, or bytes necessary if buffer is too small.
  101.     kVFVCmd_Resume            = 9,        //                buffer                Deserialize filter state from memory block.
  102.     kVFVCmd_GetParam        = 10,        //    index        buffer                Retrieve a parameter.  Return bytes used or bytes required.
  103.     kVFVCmd_SetParam        = 11,        //    index        buffer                Set a parameter.
  104.     kVFVCmd_Config            = 12,        //                &hwnd                Do modal GUI configuration using given window handle as parent.
  105.     kVFVCmd_Blurb            = 13,        //                buffer (wchar_t*)    Create short text description for current filter configuration. Return byte size used, or bytes necessary if buffer is too small.
  106.     kVFVCmd_PrefetchSrcPrv    = 14,        //    frameno                            Prefetch a frame for source preview.
  107.     kVFVCmd_GetDirectRange    = 15,        //                &pos,len            Compute valid range for direct stream copy. Returns input ID or zero if not possible.
  108.     kVFVCmd_Count
  109. };
  110.  
  111. enum VDVideoFilterFlags {
  112.     kVFVDef_RunAsFiber    = 1,            ///< Video filter must be run within the fiber scheduler.
  113. };
  114.  
  115. struct VDVideoFilterDefinition {
  116.     uint32                            mSize;                // size of this structure in bytes
  117.     uint32                            mFlags;
  118.  
  119.     uint32                            mInputPins;
  120.     uint32                            mOutputPins;
  121.  
  122.     const VDPluginConfigEntry        *mpConfigInfo;
  123.     void                            *mpDefaultCreationData;
  124.  
  125.     VDVideoFilterCreateProc            mpCreate;
  126.     VDVideoFilterMainProc            mpMain;
  127. };
  128.  
  129. enum { kVDPlugin_VideoAPIVersion = 1 };
  130.  
  131. #endif
  132.